#include <stdio.h>
#include <string.h>

/*
蛮力移位法：时间复杂度为O(mn)， 空间复杂度为O(1)

算法原理：将需要移动的字符一个一个地移到字符串的尾部

执行命令：gcc -o Rotate1 Rotate1.c && ./Rotate1
*/

// 函数功能：将字符串往左边循环移动一位，移动最左边字符到尾部
void LeftShiftOne(char *s, int n){
	// 保存第一个字符
	char t = s[0];
	int i;
	for(i = 1; i < n; i++){
		s[i-1] = s[i];
	}
	s[n-1] = t;
}


// 函数功能：往左边循环移动m位
void LeftRotateString(char *s, int n, int m){
	while(m--){
		LeftShiftOne(s, n);
	}
}


int main(){
	// 定义C字符串，要使用数组指针
	// 如果使用char *s，s[i]等数组下标操作会被认为非法
	char s[] = "abcdef";
	int len = strlen(s);
	printf("len of %s is %d\n", s, len);
	LeftRotateString(s, len, 3);
	printf("%s\n", s);
	return 0;
}
